МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра БІТ
Практична робота № 5
з навчальної дисципліни: “Прикладна криптологія”
Львів – 2011
Завдання
Написати програму мовою Сі, яка моделює роботу псевдовипадкових генераторів Фібоначчі на основі примітивних многочленів, заданих в таблиці.
Провести дослідження величини періоду псевдовипадкової послідовності від типу примітивного многочлена.
Написати програму мовою Сі, яка зашифровує-розшифровує текстовий файл (2 сторінки word- документу) за допомогою псевдовипадкової послідовності, сформованої генератором із найбільшим періодом.
Таблиця
№ з/п
F,(x)
F2(x)
F3(x)
F4(x)
F5(x)
F6(x)
F7(x)
Fs(x)
2
(19,5,2,1,0)
(151,9, 0)
(31, 13,0)
(49, 6, 5, 4, 0)
(65, 18, 0)
(157, 6,5,2, 0)
(225,109, 0)
(34, 7, 6, 5, 2, 1,0)
Блок-схема програми 1
Блок-схема програми 2
Текст програми 1
using System;
using System.Collections;
using System.IO;
using System.Text;
namespace lab5
{
class Program
{
static void Main()
{
System.Text.Encoding a = Encoding.GetEncoding(1251);
FileStream input = new FileStream("1.txt", FileMode.Open);
StreamReader sr = new StreamReader(input);
string s = "";
string vt = "";
while ((s = sr.ReadLine()) != null)
{
s += sr.ReadLine();
if (s != null)
vt += s;
}
bool[] arre = new bool[vt.Length * 8];
byte[] encodedBytes = a.GetBytes(vt);
int p = 0;
for (int m = 0; m < encodedBytes.Length; m++)
{
BitArray ba = new BitArray(new byte[] { encodedBytes[m] });
ba.CopyTo(arre, p);
p += 8;
}
int[] LFSR = new int[] { 19, 5, 2, 1, 0 };
bool[] poslid = new bool[1000000];
poslid = great(LFSR);
//шифрування
bool[] shufrtext = new bool[arre.Length];
int c = 0;
for (int b = 0; b < shufrtext.Length; b++)
{
shufrtext[b] = XOR(arre[b], poslid[c]);
c++;
if (c == poslid.Length)
c = 0;
}
//переведення в букви і вивід на екран
int lich = 0, inten, lin = 0;
bool[] vShufr = new bool[8];
byte[] Shufr = new byte[shufrtext.Length / 8];
for (int zx = 0; zx < shufrtext.Length; zx++)
{
vShufr[lich] = shufrtext[zx];
lich++;
if (lich == 8)
{
Array.Reverse(vShufr);
inten = To10(vShufr);
Shufr[lin] = Convert.ToByte(inten);
lich = 0;
lin++;
}
}
string shufrotext = a.GetString(Shufr);
Console.WriteLine("Зашифроване повiдомлення: {0}", shufrotext);
// РОЗШИФРОВУВАННЯ
bool[] rozshufr = new bool[shufrtext.Length];
c = 0;
for (int h = 0; h < shufrtext.Length; h++)
{
rozshufr[h] = XOR(shufrtext[h], poslid[c]);
c++;
if (c == poslid.Length)
c = 0;
}
//переведення в букви і вивід на екран
int lich1 = 0, inten1, lin1 = 0;
bool[] vRozhufr = new bool[8];
byte[] Rozshufr = new byte[shufrtext.Length / 8];
for (int zx = 0; zx < shufrtext.Length; zx++)
{
vRozhufr[lich1] = rozshufr[zx];
lich1++;
if (lich1 == 8)
{
Array.Reverse(vRozhufr);
inten1 = To10(vRozhufr);
Rozshufr[lin1] = Convert.ToByte(inten1);
lich1 = 0;
lin1++;
}
...